import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
import plotly
from plotly import graph_objs as go
from plotly.offline import iplot, plot
from plotly.offline import init_notebook_mode
init_notebook_mode()
from pyth.HWS import hws_exp
from pyth.HWS.hws_exp import *
This is my PhD
I did things:
I did maths:
$$ \sum_{n=1}^{\infty}{n} = -\frac{1}{12} $$and graphs:

trace = go.Scatter(
x = np.random.randn(100),
y = np.random.randn(100),
mode='markers'
)
trace2 = go.Scatter(
x = np.random.randn(100) + 4,
y = np.random.randn(100) + 4,
mode='markers'
)
iplot([trace, trace2])
class viz_data:
def __init__(self, data):
'''
Parameters
----------
data : dictionary
Output of load_data
Dictionary for each file type
'''
self.data = data
self.data_sig = data['data_sig']
self.pref_oris = self.data['data']['pref_oris']
self.cvs = self.data['data']['cvs']
if 'hw_oris' not in self.data['data'].keys():
self.hw_oris = np.arange(0, 90 + 15, 15)
else:
self.hw_oris = self.data['data']['hw_oris']
self.plasma_cmap = mpl.cm.get_cmap('rainbow_r')
def mean_pref_ori(self):
pref_oris = self.pref_oris
hw_oris = self.hw_oris
circ_mean_pref_oris = [
cs.mean(np.ones(pref_oris.shape[0]), pref_oris[:, hwo], single_angle=True)[0]
for hwo in range(pref_oris.shape[1])
]
# with sns.plotting_context('poster'), sns.axes_style('whitegrid'):
plt.plot(hw_oris, np.degrees(circ_mean_pref_oris), color='purple',
linewidth=10, label='Mean')
# plt.plot(hw_oris, np.degrees( np.percentile(pref_oris, 97.5, axis=0)), '--',
# color='0.65', linewidth=2)
# plt.plot(hw_oris, np.degrees( np.percentile(pref_oris, 2.5, axis=0)), '--',
# color='0.65', linewidth=2)
plt.fill_between(hw_oris,
np.degrees( np.percentile(pref_oris, 2.5, axis=0)),
np.degrees( np.percentile(pref_oris, 97.5, axis=0)),
color='purple', alpha = 0.25)
plt.plot(hw_oris, hw_oris, '--', color='0.65', linewidth=5, label='Pref ori = HW Ori')
plt.ylim(ymax=90*1.05)
plt.yticks(np.arange(0, 90+10, 10))
plt.xlabel('Spatial Convergence Orientation (Degs)')
plt.ylabel('Preferred Orientation (Degs)')
plt.title('Mean Preferred Orientation \n for Various Spatial Convergence Orientations')
# plt.legend()
sns.despine(offset=20)
plt.savefig(self.data_sig + '_mean_pref_ori.svg')
plt.savefig(self.data_sig + '_mean_pref_ori.pdf')
# plt.clf()
def mean_circ_var(self):
hw_oris = self.hw_oris
cvs = self.cvs
# with sns.plotting_context('poster'), sns.axes_style('whitegrid'):
plt.plot(hw_oris, np.mean(cvs, axis=0), color='purple', linewidth=10)
# plt.plot(hw_oris, np.percentile(cvs, 97.5, axis=0), '--', color='0.65', linewidth=2)
# plt.plot(hw_oris, np.percentile(cvs, 2.5, axis=0), '--', color='0.65', linewidth=2)
plt.fill_between(hw_oris,
np.percentile(cvs, 2.5, axis=0),
np.percentile(cvs, 97.5, axis=0),
color='purple', alpha = 0.25)
plt.xlabel('Spatial Convergence Orientation (Degs)')
plt.ylabel('Circular Variance (0: Circular)')
plt.title('Mean Circular Variance \nfor Various Spatial Convergence Orientations')
sns.despine(offset=20)
plt.savefig(self.data_sig + '_mean_circ_vars.svg')
plt.savefig(self.data_sig + '_mean_circ_vars.pdf')
# plt.clf()
def pref_ori_circ_var(self):
hw_oris = self.hw_oris
pref_oris = self.pref_oris
cvs = self.cvs
plasma_cmap = self.plasma_cmap
# with sns.plotting_context('poster'), sns.axes_style('white'):
for hwo in range(hw_oris.size):
plt.axvline(x=np.radians(hw_oris[hwo]),
color = plasma_cmap(hwo/7.), linestyle='-', linewidth=3,
zorder=0)
plt.plot(pref_oris[:,hwo], cvs[:,hwo], 'o', label='%s'%(hw_oris[hwo]), markersize=15,
color = plasma_cmap(hwo/7.), alpha=0.2, markeredgecolor=None, markeredgewidth=1)
# plt.legend(title='HW Ori')
plt.xlim(xmax=np.pi*1.2 / 2.)
plt.ylabel('Circular Variance (0: Circular)')
plt.xlabel('Preferred Orientation (Degs)')
plt.xticks(np.linspace(0, np.pi/2., 7, endpoint=True), np.linspace(0, 90, 7, endpoint=True).astype('int'));
plt.title('Orientation Tuning for all Trials')
sns.despine(offset=20)
plt.savefig(self.data_sig + '_pref_ori_v_circ_var.svg')
plt.savefig(self.data_sig + '_pref_ori_v_circ_var.pdf')
def rf_locs(self, trial='rand', hw_ori_idx=0, save=False):
fig = plt.figure()
if trial=='rand':
trial_idx = np.random.randint(0, high=self.pref_oris.shape[0])
else:
trial_idx = trial
hw_ori = np.radians(self.hw_oris[hw_ori_idx])
dists = self.data['data']['dists'][trial_idx, hw_ori_idx, :]
n_inputs = dists.size
x_locs = dists * np.cos(hw_ori)
y_locs = dists * np.sin(hw_ori)
ells = [
mpl.patches.Ellipse(xy = [x_locs[i],y_locs[i]],
width=13, height=1.4*13,
angle=0.,
facecolor='none', edgecolor='k')
for i in range(n_inputs)
]
ax = plt.gca()
for el in ells:
ax.add_artist(el)
plt.axis('square')
plt.xlim((-20, 20))
plt.ylim((-20, 20))
plt.title('Trial: %s; HW_idx: %s'%(trial_idx, hw_ori_idx))
if save:
plt.savefig(self.data_sig + '_rf_locs.svg')
plt.savefig(self.data_sig + '_rf_locs.pdf')
hws_exp.sns.set_style('white')
hws_exp.sns.set_context('poster', font_scale=1.5)
data = hws_exp.load_data('2017_12_01__22_24_n_inputs_30#data.npz')
np.linspace(30, 90, 3, endpoint=False)
hw_idx = 5
hw_ori = data['data']['hw_oris'][hw_idx]
bins = np.r_[np.linspace(hw_ori, 90., 3, endpoint=False), 90.]
plt.hist(np.degrees(data['data']['pref_oris'][:, hw_idx]), bins=bins)
c, b = np.histogram(np.degrees(data['data']['pref_oris'][:, hw_idx]), bins=bins)
plt.title('HW_Ori: %s'%hw_ori)
prgn_cmap = mpl.cm.get_cmap('PiYG_r')
prgn_cmap()
scores = np.zeros((6, 4))
cols = [prgn_cmap(0.12), prgn_cmap(0.333), prgn_cmap(0.666), prgn_cmap(0.87)]
for hw_idx in range(6):
hw_ori = data['data']['hw_oris'][hw_idx]
bins = np.r_[np.linspace(hw_ori, 90., 4, endpoint=False), 90.]
plt.hist(np.degrees(data['data']['pref_oris'][:, hw_idx]), bins=bins)
plt.title('HW_Ori: %s'%hw_ori)
plt.show()
c, b = np.histogram(np.degrees(data['data']['pref_oris'][:, hw_idx]), bins=bins)
c_prob = c / c.sum().astype('float') * 100
scores[hw_idx, :] = c_prob
# sag_score = (c_prob[2] - c_prob[0]) * 100
# hub_score = (c_prob[0] - c_prob[2]) * 100
# s_score.append(c_prob[2])
# hw_score.append(c_prob[0])
for i in range(4):
plt.plot(data['data']['hw_oris'][:-1], scores[:,i], linewidth=12, color=cols[i] )
plt.ylabel('Frequency (%)')
plt.xlabel('Spatial Convergence Orientation')
plt.title('Frequency of Determination of Both Mechanisms')
hws_exp.sns.despine(offset=20)
plt.savefig('scores_hw_ori.svg')
hw_idx = 1
hw_ori = data['data']['hw_oris'][hw_idx]
bins = np.r_[np.linspace(hw_ori, 90., 4, endpoint=False), 90.]
c, b = np.histogram(np.degrees(data['data']['pref_oris'][:, hw_idx]), bins=bins)
c / c.sum().astype('float')
plt.bar(b[:-1], c/c.sum().astype('float')*100, color=cols, width=(b[1]-b[0]), align='edge')
plt.xlabel('Preferred Orientation (Degs)')
plt.ylabel('Frequency (%)')
plt.title('Which Mechanism is Determinative')
hws_exp.sns.despine(offset=20, trim=False)
plt.savefig('score_n_30.svg')
dv = viz_data(data)
dv.rf_locs(save=False)
def rf_locs(data, trial='rand', hw_ori_idx=0, save=True):
fig = plt.figure()
if trial=='rand':
trial_idx = np.random.randint(0, high=data['pref_oris'].shape[0])
hw_ori = np.radians(data['hw_oris'][hw_ori_idx])
dists = data['dists'][trial_idx, hw_ori_idx, :]
n_inputs = dists.size
x_locs = dists * np.cos(hw_ori)
y_locs = dists * np.sin(hw_ori)
ells = [
mpl.patches.Ellipse(xy = [x_locs[i],y_locs[i]],
width=13, height=1.4*13,
angle=0.,
facecolor='none', edgecolor='k')
for i in range(n_inputs)
]
ax = plt.gca()
for el in ells:
ax.add_artist(el)
plt.axis('equal')
plt.xlim((-30, 30))
plt.ylim((-30, 30))
plt.title('Trial: %s; HW_idx: %s'%(trial_idx, hw_ori_idx))
if save:
plt.savefig('rf_locs.svg')
rf_locs(data['data'], hw_ori_idx=2, save=False)
dv = viz_data(data)
dv.pref_ori_circ_var()
dv.mean_pref_ori()
dv.mean_circ_var()
plt.hist(data['data']['dists'].flatten())
data['params']
plt.imshow(data['data']['all_resp'][648, 6, ...], cmap='gray')
data['data']['all_circ_stat'][648, 6, ...]
plt.hist(data['data']['all_circ_stat'][:, 2, 5, 2].flatten())
with hws_exp.sns.axes_style('dark'):
cell.plot_rf()
plt.savefig('kernel.svg')
from pyth.HWS import rfDistCalc as rfdc
opt = rfdc.make_rf_pdf()
opt
x, pdf = rfdc.jin_rf_dist(x = np.linspace(0, 2.5, 30), pdf=True)
x_pw, pdf_pw = rfdc.jin_rf_dist(x = np.linspace(0, 2.5, 30), b = 4.419, pdf=True)
pw_dists = rfdc.pdf_to_pair_wise_dist(x_pw, pdf_pw)
c, b = np.histogram(pw_dists, bins=x)
plt.plot(b[:-1], c/c.sum().astype('float'))
plt.plot(x[:-1], pdf[:-1],color='orange', linewidth=10, alpha=0.75)
plt.plot(b[:-1], c/c.sum().astype('float'),color='purple', linewidth=10, alpha=0.75)
hws_exp.sns.despine(offset=20)
plt.yticks(np.linspace(0, 0.2, 5), np.array(np.linspace(0, 0.2, 5)*100).astype('int'));
plt.ylabel('Probability (%)')
plt.xlabel('LGN Receptive Field Separation (Rec Field Widths)')
plt.title('LGN Input Separation Probability Distribution')
plt.savefig('rf_pdf.svg')
plt.imshow(data['data']['all_resp'][0, 2, ...], origin='lower', cmap='gray')
plt.colorbar()
stim_oris = data['params']['stim']['oris']
so = np.r_[stim_oris, stim_oris+180, stim_oris[0]]
resp = data['data']['all_resp'][0, 2, 5, :] / np.max(data['data']['all_resp'][0, 2, 5, :]).astype('float')
r = np.r_[resp, resp, resp[0]]
plt.polar(np.radians(so), r, linewidth=10, color='purple')
plt.yticks(np.linspace(0, 1, 5), ['', '', '0.5', '', '1'])
plt.savefig('ori_tun_eg.svg')
from pyth.HWS import static_two_layer as sl
cell = sl.static_two_layer()
cell.make_rf(cent_sd_vt=0.12, mag_cent=1.2)
cell.make_rf_charact()
cell.make_rf_circ_stat()
cell.rf_circ_stat
cell.plot_rf_charact()
cell.make_rf_layer(rf_layer_num=30)
cell.make_layer_two_resp()
cell.plot_layer_two_resp()
plt.imshow(cell.stim[0, 4, 3, ...], origin='lower')
hws_exp.sns.despine(bottom=True, left=True)
plt.savefig('stim_eg.svg')
HW wins!!
!ls *#data*
brd_data = hws_exp.load_data('2017_12_02__12_00_n_inp_30_low_kernel_CV_0105#data.npz')
brd_data_dv = hws_exp.viz_data(brd_data)
brd_data_dv.pref_ori_circ_var()
brd_data_dv.mean_pref_ori()
brd_data_dv.mean_circ_var()
scores = np.zeros((6, 4))
cols = [prgn_cmap(0.12), prgn_cmap(0.333), prgn_cmap(0.666), prgn_cmap(0.87)]
for hw_idx in range(6):
hw_ori = brd_data['data']['hw_oris'][hw_idx]
bins = np.r_[np.linspace(hw_ori, 90., 4, endpoint=False), 90.]
plt.hist(np.degrees(brd_data['data']['pref_oris'][:, hw_idx]), bins=bins)
plt.title('HW_Ori: %s'%hw_ori)
plt.show()
c, b = np.histogram(np.degrees(brd_data['data']['pref_oris'][:, hw_idx]), bins=bins)
c_prob = c / c.sum().astype('float') * 100
scores[hw_idx, :] = c_prob
# sag_score = (c_prob[2] - c_prob[0]) * 100
# hub_score = (c_prob[0] - c_prob[2]) * 100
# s_score.append(c_prob[2])
# hw_score.append(c_prob[0])